package common

import "golang.org/x/crypto/bcrypt"

func PasswordEncrypt(password string) (string, error) {
	// bcrypt.DefaultCost 默认成本 10，够用了
	bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
	return string(bytes), err
}

// CheckPassword 使用 bcrypt 算法验证密码是否匹配
// 参数:
//
//	hashedPassword: 已经过哈希处理的密码字符串
//	password: 用户输入的明文密码字符串
//
// 返回值:
//
//	bool: 如果密码匹配返回 true，不匹配返回 false
func CheckPassword(hashedPassword, password string) bool {
	// 使用 bcrypt.CompareHashAndPassword 函数比较哈希密码和明文密码
	// 该函数会自动处理密码的哈希比对过程
	// 通过判断错误是否为 nil 来确定密码是否匹配
	// 如果 err 为 nil，表示密码匹配，返回 true
	// 如果 err 不为 nil，表示密码不匹配，返回 false
	// 如果密码匹配，返回 nil 错误；如果不匹配，返回错误
	err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password))
	return err == nil
}
